package site.addzero.task

import site.addzero.cli.platform.PlatformTools
import site.addzero.cli.setting.SettingContext

/**
 * 初始化任务接口
 *
 * 所有初始化任务都需要实现此接口，提供任务支持条件和执行逻辑
 */
interface InitTask {
    /**
     * 任务是否支持当前环境
     */
    val support: Boolean
        get() = true

    /**
     * 执行任务的核心逻辑
     *
     * @return 是否执行成功
     */
    suspend fun asynctask(): Boolean

    /**
     * 执行任务并处理环绕逻辑（如状态保存）
     *
     * @return 是否执行成功
     */
    suspend fun executeWithStatus(): Boolean {
        // 检查任务是否已经执行过
        val taskKey = this::class.java.simpleName
        val statusFile = "${SettingContext.STATUS_DIR}/$taskKey.status"

        if (PlatformTools.fileExists(statusFile)) {
            println("$taskKey 已经初始化过，跳过执行")
            return true
        }

        // 执行核心任务逻辑
        val result = asynctask()

        // 如果任务执行成功，保存状态
        if (result) {
            PlatformTools.writeFile(statusFile, "completed")
        }

        return result
    }
}
